МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІКТА
кафедра ЗІ
З В І Т
до лабораторної роботи №4
з навчальної дисципліни:
«Системи запису та відтворення інформації»
на тему: «Дослідження методів обробки зображень в MatLab»
Львів – 2011
Мета роботи: набути вміння розробляти власні методи стиснення зображень та оцінювати їх ефективність.
Завдання
Ознайомитись з теоретичним матеріалом.
Завантажити файл зображення вказаний в завданні відповідно до свого варіанту.
Вивести основну інформацію про файл: кількість пікселів по горизонталі і вертикалі, тип зображення — кольорове/монохромне, кількість біт на піксел, загальний розмір зображення в бітах.
Написати JPEG-подібний кодер, згідно етапів розглянутих в теоретичній частині, який би стискав зображення з заданим степенем стиску G.
Вивести на екран оригінальне та декомпресоване зображення для порівняння їх якості.
Розрахувати реальну степінь стиснення зображення.
Навести покрокові результати всіх етапів стиснення та відтворення довільного блоку 8x8 пікселів Вашого зображення.
Варіант – 1, назва файлу belmont.tiff.
Лістинг програми
clear all;
info = imfinfo('E:\belmont2.tiff')
Y=imread('E:\belmont2.tiff');
[N,M]= size(Y);
N_Block=fix(N/8);
M_Block=fix(M/8);
if(N-N_Block*8)~=0;
Dod=8-((N-N_Block*8));
Y=[Y; zeros(Dod,M)];
N_Block=N_Block+1;
end;
if(M-M_Block*8)~=0;
Dod=8-((M-M_Block*8));
Y=[Y zeros(N_Block*8,Dod)];
M_Block=M_Block+1;
end;
Y1=double(Y)-128;
Y_DCT=blkproc(Y1, [8,8], 'dct2');
G=10;
for ii = 1:8
for jj = 1:8
Q_Table(ii,jj)=1+(ii+jj-1)*G;
end;
end;
for ii=1:N_Block
for jj=1:M_Block
Y_Q((8*ii-7):(8*ii), (8*jj-7) : (8*jj)) = round (Y_DCT((8*ii-7):(8*ii), (8*jj-7) : (8*jj)) ./ Q_Table );
end;
end;
Y_Scan=zeros(N_Block*M_Block, 64);
count=1;
for j=1:N_Block
for i=1:M_Block
x=Y_Q(8*j-7:8*j, 8*i-7:8*i);
ZigZag= [x(1,1) x(1,2) x(2,1) x(3,1) x(2,2) x(1,3) x(1,4) x(2,3) x(3,2) x(4,1) x(5,1) x(4,2) x(3,3) x(2,4) x(1,5) x(1,6) x(2,5) x(3,4) x(4,3) x(5,2) x(6,1) x(7,1) x(6,2) x(5,3) x(4,4) x(3,5) x(2,6) x(1,7) x(1,8) x(2,7) x(3,6) x(4,5) x(5,4) x(6,3) x(7,2) x(8,1) x(8,2) x(7,3) x(6,4) x(5,5) x(4,6) x(3,7) x(2,8) x(3,8) x(4,7) x(5,6) x(6,5) x(7,4) x(8,3) x(8,4) x(7,5) x(6,6) x(5,7) x(4,8) x(5,8) x(6,7) x(7,6) x(8,5) x(8,6) x(7,7) x(6,8) x(7,8) x(8,7) x(8,8) ];
Y_Scan(count , :)=ZigZag;
count=count+1;
end;
end;
delta = 0; midle =[ ];
for ii=1:N_Block*M_Block
vect = Y_Scan(ii,2:64);
n=0; res=[];
for jj=1:63
if vect(jj)==0
n=n+1;
else
res = [res n vect(jj)];
n=0;
end;
end;
res= [res 0 0 ];
Y_C=[midle (Y_Scan(ii,1)-delta) res];
delta=Y_Scan(ii,1);
midle=Y_C;
end;
Bit_Count = 0;
for ii=1:length(Y_C)
elem=Y_C(ii);
switch elem
case 0, kod=1;
case 1, kod=4;
case -1, kod=4;
case 2, kod=4;
case -2, kod=4;
case 3, kod=5;
case -3, kod=5;
case 4, kod=5;
case -4, kod=5;
case 5, kod=7;
case -5, kod=7;
case 6, kod=7;
case -6, kod=7;
case 7, kod=7;
case -7, kod=7;
case 8, kod=7;
case -8, kod=7;
otherwise kod=13;
end;
Bit_Count =Bit_Count+kod;
end;
m=N*M*8;
Compression_Ratio = m/(Bit_Count)
for ii =1:...